import type { ExtensibleEntityDto, ExtensibleObject } from '@abp/ng.core';
import type { OperatorType } from './operator-type.enum';

export interface DepartmentCreateDto extends DepartmentCreateOrUpdateBase {
}

export interface DepartmentCreateOrUpdateBase extends ExtensibleObject {
  tenantId?: string;
  level: number;
  parentId?: string;
  displayName?: string;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  sourceCreatedOn?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
}

export interface DepartmentDto extends ExtensibleEntityDto<string> {
  tenantId?: string;
  level: number;
  parentId?: string;
  displayName?: string;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  sourceCreatedOn?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
  concurrencyStamp?: string;
}

export interface DepartmentUpdateDto extends DepartmentCreateOrUpdateBase {
  concurrencyStamp?: string;
}

export interface OperatorCreateDto extends OperatorCreateOrUpdateBase {
}

export interface OperatorCreateOrUpdateBase extends ExtensibleObject {
  tenantId?: string;
  departmentId?: string;
  name?: string;
  operatorType: OperatorType;
  enabled: boolean;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  sourceCreatedOn?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
}

export interface OperatorDto extends ExtensibleEntityDto<string> {
  tenantId?: string;
  departmentId?: string;
  department: DepartmentDto;
  name?: string;
  operatorType: OperatorType;
  enabled: boolean;
  code?: string;
  sourceType?: string;
  sourceKey?: string;
  isDeleted: boolean;
  deleterId?: string;
  deletionTime?: string;
  lastModificationTime?: string;
  lastModifierId?: string;
  creationTime?: string;
  creatorId?: string;
  concurrencyStamp?: string;
}

export interface OperatorUpdateDto extends OperatorCreateOrUpdateBase {
  concurrencyStamp?: string;
}
